package requeteur.ejb.commun.dto;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import requeteur.ejb.commun.enumeration.EnumTypeRequete;

/**
 * @author l.parrot1
 * @version 0.1
 */
public class ResultatRequeteSelect extends ResultatRequete {

	private List<String> champs = new ArrayList<String>();
	private List<Map<String, Object>> valeurs = new ArrayList<Map<String, Object>>();

	/**
	 * Constructeur de la classe <code>ResultatRequete</code>.
	 * @param pUpdate
	 * @throws SQLException
	 */
	public ResultatRequeteSelect(ResultSet pResultSet) throws SQLException {
		setType(EnumTypeRequete.select);
		ResultSetMetaData vMetaData = pResultSet.getMetaData();
		for (int i = 1; i < vMetaData.getColumnCount() + 1; i++) {
			getChamps().add(vMetaData.getColumnName(i));
		}
		while (pResultSet.next()) {
			Map<String, Object> vLigne = new HashMap<String, Object>();
			for (String vChamp : getChamps()) {
				vLigne.put(vChamp, pResultSet.getObject(vChamp));
			}
			getValeurs().add(vLigne);
		}
		setNombreOccurence(getValeurs().size());
	}

	/**
	 * <p><b>Accès en lecture à l'attribut champs.</b></p>
	 * @return Retourne l'attribut champs sous forme de <code>List<String></code>.
	 */
	public List<String> getChamps() {
		return champs;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut champs.</b></p>
	 * @param pChamps L'attribut champs à modifier.
	 */
	public void setChamps(List<String> pChamps) {
		champs = pChamps;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut valeurs.</b></p>
	 * @return Retourne l'attribut valeurs sous forme de <code>List<Map<String,Object>></code>.
	 */
	public List<Map<String, Object>> getValeurs() {
		return valeurs;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut valeurs.</b></p>
	 * @param pValeurs L'attribut valeurs à modifier.
	 */
	public void setValeurs(List<Map<String, Object>> pValeurs) {
		valeurs = pValeurs;
	}

}
